iT邦幫忙

2

Javascript 進階 3-10 第三章總結

  • 分享至 

  • xImage
  •  

這邊用這篇文章來做總結一下

會用一些範例幫大家複習觀念

範例一

var a = 1;
var b = new Number(1);
console.log(a == b);  // true
console.log(a === b); // false

可以看到在 寬鬆相等 的時候型別會自己轉換,所以 建構式建構出來的 包裹物件 數字 1 是等同於 原始型別 的數字 1。

嚴格相等 的比較狀況下,就會將 建構式建構出來的 包裹物件 視為是物件,型別不相等因而回傳 false的結果。

範例二

console.log(1 || 0); // 1

使用邏輯運算子 || 會回傳經過判斷為第一個為 truthy 的值,就回傳第一個值,否則就回傳第二個。
這邊依照這個概念判斷,1 為 truthy 就直接回傳 1 。

範例三

var a = 1;
var b = 2;
var c = 0;
console.log(a && b && c); // 0

使用邏輯運算子 && 為二元運算子,一次只會處理左右兩個運算元,且其相依性為 左到右。

又,&& 會判斷第一個值為 falsy 會直接回傳,不然就回傳第二個的值,所以~ 這邊 a = 1 是 truthy, 他就直接回傳 b = 2。

接著表達式就變成 2 && 0 ,這時候一樣 2 是 truthy ,所以直接回傳 的結果。

如果上面的邏輯沒問題的話,再看看一樣用範例三的範例來進行說明:

console.log(c || c && c || a);

這邊同時有 && 以及 || 這兩個邏輯運算子,在優先度來說,&&|| 還高,所以會先執行 c && c ,並且回傳結果為 0。 之後才進行 c || 0 的判斷結果, 因為第一個 c 是 falsy,所以回傳第二個值。

之後 0 || a,很明顯 0 就是 falsy,所以回傳 a 的值,也就是 1。

console.log(c || 0 || a);

console.log(0 || a);

console.log(a); // 1

好,依照上面的邏輯,我們再來看一下這個練習題,也是延續範例三的變數設定喔

console.log(a && b || c && a);

這邊直接公布答案是 2。

大家可以自己推演看看喔。

範例四

var a = 1 + 1 === 1;
console.log(a); // false

這題很明顯就是在考優先序的部分,因為 + 的優先序大於 === ,所以自然 2 === 1 會回傳 false。

範例五

console.log(1000 < 10000 < 10); // true

這邊就是考大家相依性的問題 < 的相依性是從左到右,並且是二元運算子。

所以她的比對流程會是

1000 < 10000 回傳 true
true < 10 型別轉換
Number(true) => 回傳 1
1 < 10 // ture
console.log(true);

所以結果就是true。

範例六

var a = '1';
var b = 2;
var c = (a > b) ? a * b : sum(a, b);
function sum (a, b) {
    return a + b;
}
console.log(c); // '12'

這邊的邏輯首先先從 (a > b) 這個判斷開始看,在比對的時候雖然 a 是字串 1 ,但會被轉型為 數字 1,接著 1 > 2 會回傳 false,所以會執行 sum(a, b)。

而這個sum又會回傳依照傳入的 a , b進行處理。

又因為 字串'1' + 數字2 => 會轉型為字串'12'。

所以最後印出來的結果就是 '12'。

這個篇文章就用這六個範例幫大家複習第三章學習到的觀念跟知識,沒有問題的話就可以往下進行嚕~汪汪


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言